package 多线程.Volatile关键字;

/**
 * Created by Administrator on 2017/8/31.
 */
public class TestWithVolatile {
    private static volatile boolean bChanged;  //程序输出!=，然后马上退出。
//    private static boolean bChanged;  //运行后，程序进入死循环了，一直在运行。

    public static void main(String[] args) throws InterruptedException {
        new Thread() {
            @Override
            public void run() {
                for (;;) {  //死循环
                    if (bChanged == !bChanged) { //volatile修饰时不会死循环原理：!bChanged取的是false时，反转为true，
                                     //又去取左边bChanged时，值被线程2修改为了true，此时等号成立
                        System.out.println("!=");
                        System.exit(0);
                    }
                }
            }
        }.start();
        Thread.sleep(1);
        new Thread() {

            @Override
            public void run() {
                for (;;) {
                    bChanged = !bChanged;
                }
            }
        }.start();
    }
}
